From 42162a97c0cb8b9de57e28bd9b48575a51b92056 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 15 Jun 2006 09:10:14 -0600 Subject: [PATCH] [IA64] work around for skbuff_ctor() on non-privileged domain populate physmap/increase reservation hypercall fail with extent order > 0 on non-privileged domain. Signed-off-by: Isaku Yamahata --- linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c index 58e30466a3..a406273513 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c @@ -76,6 +76,15 @@ ia64_xenmem_reservation_op(unsigned long op, } break; } + if (tmp_ret == 0) { + //XXX dirty work around for skbuff_ctor() + // of a non-privileged domain, + if ((op == XENMEM_increase_reservation || + op == XENMEM_populate_physmap) && + !(xen_start_info->flags & SIF_PRIVILEGED) && + reservation.extent_order > 0) + return ret; + } frame_list += tmp_ret; nr_extents -= tmp_ret; ret += tmp_ret; @@ -165,7 +174,12 @@ HYPERVISOR_populate_physmap(unsigned long gpfn, unsigned int extent_order, }; set_xen_guest_handle(reservation.extent_start, &gpfn); ret = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation); - BUG_ON(ret != 1); + // it may fail on non-privileged domain with extent_order > 0. + BUG_ON(ret != 1 && + !(ret == 0 && !(xen_start_info->flags & SIF_PRIVILEGED) && + extent_order > 0)); + if (ret != 1) + return -EINVAL;//XXX return 0; } -- 2.30.2